1. Field of the Invention
This invention relates generally to Reed-Solomon encoders. More particularly, it relates to a high throughput 8-bit Reed Solomon encoder capable of producing R=2T bytes of redundancy where T=1 to 16, in compliance with the proposed 802.16.1 wireless standard.
2. Background
Reed-Solomon codes are block-based error correcting codes with a wide range of applications in digital communications and storage. Reed-Solomon codes are used to correct errors in many systems including storage devices (including tape, Compact Disk, DVD, barcodes, etc), wireless or mobile communications (including cellular telephones, microwave links, etc), satellite communications, digital television/DVB, high-speed modems such as ADSL, xDSL, etc.,
A Reed-Solomon encoder takes as input a block of digital data, comprising a sequence of digital information bits, and interprets it as a sequence of information symbols. Each such symbol comprises m bits of the digital information sequence. The block of input data comprises K such information symbols. The Reed-Solomon encoder produces R additional redundant symbols, which are concatenated with the K information symbols to form a codeword comprising N=K+R symbols. The parameters of the Reed-Solomon code are indicated by referring to such a code as an RS(N,K) code with m bit symbols.
Errors occur during transmission or storage for a number of reasons (for example noise or interference, scratches on a CD, etc). A Reed-Solomon decoder processes each block and attempts to correct errors and recover the original data. The number and type of errors that can be corrected depends on the characteristics of the Reed-Solomon code. In general, an RS(N,K) decoder can correct any combination of T=R/2 corrupted symbols provided that the remainder of the N symbols of the codeword are correct.
For instance, a Reed-Solomon encoder may include one popular Reed-Solomon code: RS(255,223) with 8-bit symbols. With this code, each codeword contains 255 code word bytes, of which 223 bytes are data and 32 bytes are parity. In this example, a matching Reed-Solomon decoder can automatically correct up to 16 byte errors anywhere in the codeword.
Reed-Solomon codes are based on a specialized area of mathematics known as abstract algebra, which includes the theory of finite fields, which are also known as Galois fields. A finite field has the property that arithmetic operations (add, multiply, exponentiate, etc.) on field elements always have a result in the field. A Reed-Solomon encoder or decoder needs to carry out these arithmetic operations. Reed-Solomon encoding (and/or decoding) can be carried out in software or in special purpose hardware.
A Reed-Solomon codeword is produced by utilizing polynomial division using the arithmetic of the Galois field. All valid codewords are exactly divisible by the generator polynomial.
The general form of the generator polynomial of a Reed-Solomon code is:
                              g          ⁡                      (            D            )                          =                ⁢                              ∏                          i              =              0                                      R              -              1                                ⁢                                          ⁢                      (                          D              +                              α                i                                      )                                                  =                ⁢                              ∑                          i              =              0                        R                    ⁢                                          ⁢                                    g              i                        ⁢                          D              i                                          where the symbol α is a special element of the Galois field referred to as a primitive element, and R is the number of redundant symbols to be produced. When m=8 bits, the Galois field GF(256) is commonly generated by the primitive polynomialp(x)=x8+x4+x3+x2+1and is commonly represented in an α-basis, as it is known in the literature. In this representation, an 8 bit binary symbol, c[7:0], is associated with the polynomial
      c    ⁡          (      x      )        =            ∑              i        =        0            7        ⁢                  ⁢                  c        ⁡                  [          i          ]                    ⁢              x        i            and the symbol α is represented by the binary string 00000010. The sum of two symbols is the bit-wise XOR of their binary representations, and the product of symbols b[7:0] and c[7:0] is the symbol a[7:0] associated with the polynomiala(x)=b(x)·c(x) modulo p(x).
The input to the encoder is the sequence of information symbols{u0, u1, . . . , uK-1}which is interpreted as the polynomialu(D)=u0DK-1+u1DK-2+. . . +uK-2D+uK-1A polynomial division using the Galois field arithmetic processes this polynomial and the generator polynomial to produce a quotient polynomial q(x) and a remainder polynomial r(D) satisfyingDRu(D)=q(D)g(D)+r(D),wherer(D)=r0DR-1+r1DR-2+. . . +rR-2D+rR-1The codeword is formed by appending the R redundant symbols to the information symbols, forming the codeword sequence:{c0, c1, . . . , cN-1}={u0, u1, . . . uK-1, r0, r1, . . . , rR-1}This sequence has the property that the polynomial:
      c    ⁡          (      D      )        =            ∑              i        =        0                    N        -        1              ⁢                  ⁢                  c        i            ⁢              D                  N          -          1          -          i                    is divisible by the generator polynomial g(D).
An example generator polynomial for a Reed-Solomon code RS(255,249)g(D)=(D−α0)(D−α1)(D−α2)(D−α3) (D−α4)(D−α5)Using the Galois field arithmetic, the terms of this polynomial are multiplied to form the polynomial:g(D)=D6+g5D5+g4D4+g3D3+g2D2+g1D+g0where g0, g1, . . . , g5 are specific symbols in the field.
U.S. Pat. No. 5,444,719 to Cox et al., entitled “Adjustable Error-Correction Composite Reed-Solomon Encoder/Syndrome Generator” (hereinafter “Cox”), discloses a conventional combined Reed-Solomon encoder/syndrome generator.
FIG. 1 of the present application shows a block diagram of relevant portions of a conventional Reed-Solomon encoder/syndrome generator disclosed, e.g., in FIG. 2 of Cox.
In particular, as shown herein in FIG. 1, the large circles labeled with generator coefficients g1, 1100, 1101, 1102–110n represent constant multipliers over a Galois field. These generator coefficient multipliers gi 1100, 1101, 1102–110n tend to dominate the critical net loading, gate count and routing area of a Reed-Solomon encoder. 1150, 1151, 1152–115n are registers and the smaller circles labeled with a “+” are Galois field adders 1201, 1202–120n and 125 each consisting of m XOR gates.
A disadvantage of the conventional architecture, e.g., as shown in FIG. 1, is that it does not lend itself easily to supporting more than one specific Reed-Solomon code. This is because the generator coefficients mostly change when a differing number of redundant bytes are to be produced for each of the different Reed-Solomon codes.
The digital filter H(D) 100 of the Reed-Solomon encoder shown in FIG. 1 has a transfer function of the form:H(D)=Y(D)/X(D)=1+1/(ΣgiDR-i)where the summation Σ runs from i=0 to i=R in steps of 1. This transfer function can be re-expressed asH(D)=1+ΠHi(D)where the product Π runs from i=0 to i=R−1 in steps of 1, andHi(D)=1/(1+αiD).
Cox discloses how to produce a Reed-Solomon encoder by cascading R filters with transfer functions of the form Hi(D) as described above, where i=0, 1, . . . , R−1.
One advantage of the implementation disclosed by Cox is that each of the filters Hi(D) can also be used independently to produce the decoder syndrome S, used in a complementary Reed-Solomon decoder. Cox uses the R filters Hi(D) in cascade to perform the Reed-Solomon encoding function, and in parallel to perform the first step of Reed-Solomon decoding. This reduces the amount of hardware required in an implementation utilizing a Reed-Solomon encoder and decoder in the same integrated circuit chip.
Perhaps the most distinctive feature of Cox's Reed-Solomon encoder is that it implements individual degree polynomial filters. In particular, Cox teaches the use N subfilters, each of degree 1, which are cascaded to produce an encoder transfer function. Cox teaches that these N subfilters can also be used as syndrome calculators. Cox's individual stages of the cascaded filter can be easily disabled, providing for the ability to produce varying amounts of redundancy from the same basic circuit.
However, a disadvantage of Reed-Solomon encoders such as are disclosed by Cox is that the critical path of the Reed-Solomon encoder can be quite long for large values of R.
A need arises from the proposed 802.16.1 wireless communications standard for an encoder that operates with higher throughput rates and supports sixteen different amounts of redundancy, i.e. T=1 to 16.